// Kony

#pragma once

#include "CoreMinimal.h"
#include "GameplayTagContainer.h"

/**
 * C++原生游戏标签单例 在C++中创建 可被其他任意模块 和 蓝图调用
 * 
 */
struct FBaseGameplayTags
{
public:
	//获取游戏标签
	static const FBaseGameplayTags& Get(){ return GameplayTags;};
	//初始化游戏标签
	static void InitializeNativeGameplayTags();
	//选择目标
	FGameplayTag SelectedTarget;
	//游戏标签变量
	// 主要属性
	FGameplayTag Attributes_Primary_Strength;
	FGameplayTag Attributes_Primary_Intelligence;
	FGameplayTag Attributes_Primary_SoulPower;
	FGameplayTag Attributes_Primary_Resilience;
	FGameplayTag Attributes_Primary_Vigor;
	FGameplayTag Attributes_Primary_Spirit;
	FGameplayTag Attributes_Primary_Agility;
	FGameplayTag Attributes_Primary_Insight;

	// 核心主要属性
	// FGameplayTag Attributes_Primary_Health;
	// FGameplayTag Attributes_Primary_Mana;

	
	// 最大生命值
	FGameplayTag Attributes_Secondary_MaxHealth;
	// 最大法力值
	FGameplayTag Attributes_Secondary_MaxMana;
	// 幽灵生命值
	FGameplayTag Attributes_Secondary_GhostHealth;
	// 幽灵法力值
	FGameplayTag Attributes_Secondary_GhostMana;
	// 护甲
	FGameplayTag Attributes_Secondary_Armor;
	// 护甲穿透
	FGameplayTag Attributes_Secondary_ArmorPenetration;
	// 法术穿透
	FGameplayTag Attributes_Secondary_SpellPenetration;
	// 格挡几率
	FGameplayTag Attributes_Secondary_BlockChance;
	// 暴击几率
	FGameplayTag Attributes_Secondary_CriticalHitChance;
	// 暴击伤害
	FGameplayTag Attributes_Secondary_CriticalHitDamage;
	// 暴击抗性
	FGameplayTag Attributes_Secondary_CriticalHitResistance;
	// 生命恢复
	FGameplayTag Attributes_Secondary_HealthRegeneration;
	// 法力恢复
	FGameplayTag Attributes_Secondary_ManaRegeneration;
	// 移动速度
	FGameplayTag Attributes_Secondary_MovementSpeed;
	// 攻击速度
	FGameplayTag Attributes_Secondary_AttackSpeed;
	// 施法速度
	FGameplayTag Attributes_Secondary_SpellCastingSpeed;
	// 命中几率
	FGameplayTag Attributes_Secondary_HitChance;
	// 闪避率
	FGameplayTag Attributes_Secondary_DodgeRate;
	// 感知范围
	FGameplayTag Attributes_Secondary_PerceptionRange;
	// 召唤物持续时间
	FGameplayTag Attributes_Secondary_SummonDuration;
	// 护体罡气
	FGameplayTag Attributes_Secondary_ProtectiveAura;

	// 抗性类型标签
	FGameplayTag Attributes_Resistance_Physical;
	FGameplayTag Attributes_Resistance_Magic;
	FGameplayTag Attributes_Resistance_Summon;
	FGameplayTag Attributes_Resistance_Fire;
	FGameplayTag Attributes_Resistance_Water;
	FGameplayTag Attributes_Resistance_Earth;
	FGameplayTag Attributes_Resistance_Wood;
	FGameplayTag Attributes_Resistance_Gold;
	FGameplayTag Attributes_Resistance_Ice;
	FGameplayTag Attributes_Resistance_Lightning;
	FGameplayTag Attributes_Resistance_Wind;
	FGameplayTag Attributes_Resistance_Poison;
	FGameplayTag Attributes_Resistance_Dark;
	FGameplayTag Attributes_Resistance_Arcane;

	/* 元属性 */
	//经验值 修为值
	FGameplayTag Attributes_Meta_IncomingXP;
	//灵气值
	FGameplayTag Attributes_Meta_IncomingLingQi;


	//按键映射标签
	FGameplayTag InputTag_LMB;
	FGameplayTag InputTag_RMB;
	FGameplayTag InputTag_1;
	FGameplayTag InputTag_2;
	FGameplayTag InputTag_3;
	FGameplayTag InputTag_4;
	//被动标签，虽然不用按键但需要标签绑定
	FGameplayTag InputTag_Passive_1;
	FGameplayTag InputTag_Passive_2;
	//伤害标签
	FGameplayTag Damage;
	/* 伤害类型 */
	//物理伤害
	FGameplayTag Damage_Physical;
	//法术伤害
	FGameplayTag Damage_Magic;
	//召唤物伤害
	FGameplayTag Damage_Summon;
	//火焰伤害
	FGameplayTag Damage_Fire;
	//水属性伤害
	FGameplayTag Damage_Water;
	//土属性伤害
	FGameplayTag Damage_Earth;
	//木属性伤害
	FGameplayTag Damage_Wood;
	//金属性伤害
	FGameplayTag Damage_Gold;
	//冰属性伤害
	FGameplayTag Damage_Ice;
	//雷属性伤害
	FGameplayTag Damage_Lightning;
	//风属性伤害
	FGameplayTag Damage_Wind;
	//毒属性伤害
	FGameplayTag Damage_Poison;
	//暗属性伤害
	FGameplayTag Damage_Dark;
	//奥术伤害 - 虚空伤害
	FGameplayTag Damage_Arcane;
	//伤害类型和抗性关联数组
	TMap<FGameplayTag,FGameplayTag> DamageTypesToResistances;

	/* Debuff属性标签 */
	//无属性异常
	FGameplayTag Debuff_Propertie_None;
	//火焰对应的燃烧 每秒造成火焰伤害，每层提升5%伤害 最多5层
	FGameplayTag Debuff_Propertie_Burn;
	//闪电对应的眩晕 眩晕2.5秒
	FGameplayTag Debuff_Propertie_Stun;
	//水寒冷效果 再次受到冰冷伤害伤害提升10%
	FGameplayTag Debuff_Propertie_Cold;
	//冰属性冰冻效果 再次受到冰冷伤害造成爆炸伤害效果为30%
	FGameplayTag Debuff_Propertie_Freeze;
	//物理对应撕裂效果 每层提升2%伤害 最多10层
	FGameplayTag Debuff_Propertie_Tear;
	//减速效果
	FGameplayTag Debuff_Propertie_Slow;
	//击倒效果
	FGameplayTag Debuff_Propertie_Down;
	//木属性对应汲生吸取 吸收敌人生命 恢复自身
	FGameplayTag Debuff_Propertie_Leech;
	//毒属性对应中毒效果 每秒造成火焰伤害，每层提升1%伤害 最多99层
	FGameplayTag Debuff_Propertie_Poison;
	//出血效果 每秒造成流血伤害，每层提升2%伤害 最多12层
	FGameplayTag Debuff_Propertie_BloodLoss;
	//阵法对应束缚效果 无法移动并降低防御10%
	FGameplayTag Debuff_Propertie_Bind;
	//暗属性或者其他易伤效果 受到的所有伤害提升20%
	FGameplayTag Debuff_Propertie_KnockBack;
	//风属性攻击-割裂出血 再次受到风系伤害 伤害提升
	FGameplayTag Debuff_Propertie_Bleed;
	//土属性对应的迟钝效果 对方造成的伤害降低10% 并降低移速10%
	FGameplayTag Debuff_Propertie_Dull;
	//金属性破甲效果 对方护甲减少15%
	FGameplayTag Debuff_Propertie_ArmorBreak;
	
	/* 异常配置标签 */
	//异常类型
	FGameplayTag Debuff_Type;
	//异常触发概率
	FGameplayTag Debuff_Chance;
	//异常伤害
	FGameplayTag Debuff_Damage;
	//是否启用异常伤害百分比
	FGameplayTag Debuff_DamagePercentage;
	//异常触发频率
	FGameplayTag Debuff_Frequency;
	//异常持续时间
	FGameplayTag Debuff_Duration;
	//伤害类型于负面效果关联
	TMap<FGameplayTag,FGameplayTag> DamageTypesToDebuffs;


	

	
	/* 技能能力标签 这是用于释放技能 */
	//无 - 此能力TAG 用于判断和默认值设定 类似于能力标签的空指针
	FGameplayTag Abilities_None;
	//攻击
	FGameplayTag Abilities_Attack;
	//召唤
	FGameplayTag Abilities_Summon;

	/* 各种反应能力标签 */
	//能力受击反应
	FGameplayTag Abilities_HitReact;
	
	/* 技能状态标签 */
	//能力状态 - 锁定
	FGameplayTag Abilities_Status_Locked;
	//能力状态 - 可解锁
	FGameplayTag Abilities_Status_Eligible;
	//能力状态 - 已解锁
	FGameplayTag Abilities_Status_Unlocked;
	//能力状态 - 装备
	FGameplayTag Abilities_Status_Equipped;

	/* 用于技能分类标签 */
	//能力类型 - 主动
	FGameplayTag Abilities_Type_Offensive;
	//能力类型 - 被动
	FGameplayTag Abilities_Type_Passive;
	//能力类型 - 无（用于清空技能栏）
	FGameplayTag Abilities_Type_None;
	
	/* 主动技能法术名称标签 */
	//火球
	FGameplayTag Abilities_Fire_FireBolt;
	//火球冲击爆炸
	FGameplayTag Abilities_Fire_FireBlast;
	//电击
	FGameplayTag Abilities_Lightning_Electrocute;
	//奥术碎片 - 虚空碎片
	FGameplayTag Abilities_Arcane_ArcaneShards;

	/* 被动技能名称标签*/
	//Protection 被动护盾
	FGameplayTag Abilities_Passive_HaloOfProtection;
	//生命吸取被动
	FGameplayTag Abilities_Passive_LifeSiphon;
	//法力吸取被动
	FGameplayTag Abilities_Passive_ManaSiphon;
	
	/* 技能冷却标签 */
	//火球术冷却标签
	FGameplayTag Cooldown_Fire_FireBolt;
	//电击冷却事件
	FGameplayTag Cooldown_Lightning_Electrocute;

	
	/* 战斗插槽标签，用于在蓝图中获取战斗插槽 */
	FGameplayTag CombatSocket_Weapon;
	FGameplayTag CombatSocket_LeftHand;
	FGameplayTag CombatSocket_RightHand;
	FGameplayTag CombatSocket_Tail;
	
	/* 蒙太奇标签 用于绑定攻击动画蒙太奇可单一播放或者用于连招 还有在 gameplay cue 提示中使用 ，发送攻击特效等 */
	FGameplayTag Montage_Attack_1;
	FGameplayTag Montage_Attack_2;
	FGameplayTag Montage_Attack_3;
	FGameplayTag Montage_Attack_4;
	FGameplayTag Montage_Attack_5;
	
	//受击反应效果
	FGameplayTag Effects_HitReact;

	//禁用玩家输入行为标签,用于一些操作时或过长时 禁止玩家输入
	FGameplayTag Player_Block_InputPressed;
	FGameplayTag Player_Block_InputHeld;
	FGameplayTag Player_Block_InputReleased;
	FGameplayTag Player_Block_CursorTrace;

	/*
	 * 游戏通知标签，用于发送游戏通知（播放技能效果）
	 */
	FGameplayTag GameplayCue_FireBlast;
	
protected:

private:
	static FBaseGameplayTags GameplayTags;
};
